iT邦幫忙

0

用 JavaScript 打造SAM TTS 語音合成網站

tts
  • 分享至 

  • xImage
  •  

最近在研究TTS的過程中發現了SAM TTS這個古老的TTS,所以我試著復刻一個相似的服務。

以下是我簡單的紀錄


為什麼選 SAM TTS?

雖然現在 TTS 技術已經非常先進(像是 Google TTS 或 Microsoft Azure TTS),但 SAM TTS 有一種「電子懷舊感」,再加上它的聲音控制參數(pitch、speed、mouth、throat)讓人可以隨意玩出各種「搞怪語音」。


技術

模組 技術
語音核心 sam-js
前端框架 React / Next.js(你也可以用純 HTML)
音訊播放 HTML5 <audio> + Blob 物件
UI 組件 Tailwind CSS or DaisyUI(快速做出調整面板)
進階分享(選用) Supabase 儲存分享紀錄 & URL

實作步驟

第一步:安裝 sam-js

在你的專案中先安裝這個語音合成核心:

npm install sam-js

如果沒有使用打包工具,也可以直接 引入原始 JS。

第二步:撰寫語音合成功能

import sam from 'sam-js';

function synthesize(text, options = { pitch: 64, speed: 72, mouth: 128, throat: 128 }) {
  const buffer = sam(text, options);
  const blob = new Blob([buffer], { type: 'audio/wav' });
  const url = URL.createObjectURL(blob);
  return url;
}

你可以把這個 url 給 audio 元件播放,或用 a.download 提供下載。

第三步:建立網頁 UI

簡單的 HTML UI 範例如下:

<textarea id="inputText"></textarea>
<button onclick="play()">播放</button>
<audio id="audio" controls></audio>

搭配剛才的 synthesize() 函式,就可以做出以下功能:

function play() {
  const text = document.getElementById('inputText').value;
  const url = synthesize(text);
  const audio = document.getElementById('audio');
  audio.src = url;
  audio.play();
}

🎛 加入聲音參數控制面板

SAM 的樂趣之一就是可以控制聲音風格。建議用 4 個 range input 讓使用者調整參數:

  • Pitch(音高):0~255
  • Speed(速度):0~255
  • Mouth(嘴巴張開程度):0~255
  • Throat(喉嚨共鳴):0~255

透過這些參數,可以變出:

  • 機器人聲
  • 外星人聲
  • 女巫聲

🧪 示範網站

🧵 結語
透過這篇文章,我們成功復刻了 SAM TTS 的聲音生成邏輯,並用 JavaScript 做出一個可即時播放和分享語音的網頁工具。如果你喜歡這種開源懷舊風,不妨也來玩玩看!


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言